// 引入API接口
const api = require('../../../api/index')
// 引入认证工具
const auth = require('../../../utils/auth')

Page({
  data: {
    // 表单数据
    form: {
      username: '',
      password: '',
      confirmPassword: ''
    },
    // 用户角色
    role: 'citizen',
    // 密码显示状态
    showPassword: false,
    showConfirmPassword: false,
    // 用户协议同意状态
    agreed: false,
    // 加载状态
    loading: false,
    // 全局加载状态
    globalLoading: false,
    globalLoadingText: '身份验证中...'
  },

  // 显示全局加载
  showGlobalLoading(text = '身份验证中...') {
    const app = getApp()
    app.showGlobalLoading({
      loadingText: text
    })
  },

  // 隐藏全局加载
  hideGlobalLoading() {
    const app = getApp()
    app.hideGlobalLoading()
  },

  // 更新全局加载状态
  updateGlobalLoading(data) {
    this.setData({
      globalLoading: data.globalLoading,
      globalLoadingText: data.globalLoadingText || this.data.globalLoadingText
    })
  },

  /**
   * 页面加载
   */
  onLoad(options) {
    // 显示页面加载效果
    this.showGlobalLoading('身份验证中...')
    console.log('注册页面加载')
    
    // 页面加载完成，隐藏加载状态
    setTimeout(() => {
      this.hideGlobalLoading()
    }, 500)
  },

  /**
   * 角色切换
   */
  onRoleChange(e) {
    const role = e.currentTarget.dataset.role
    this.setData({
      role: role
    })
  },

  /**
   * 用户名输入
   */
  onUsernameInput(e) {
    this.setData({
      'form.username': e.detail.value
    })
  },

  /**
   * 密码输入
   */
  onPasswordInput(e) {
    this.setData({
      'form.password': e.detail.value
    })
  },

  /**
   * 确认密码输入
   */
  onConfirmPasswordInput(e) {
    this.setData({
      'form.confirmPassword': e.detail.value
    })
  },

  /**
   * 切换密码显示状态
   */
  onTogglePassword() {
    this.setData({
      showPassword: !this.data.showPassword
    })
  },

  /**
   * 切换确认密码显示状态
   */
  onToggleConfirmPassword() {
    this.setData({
      showConfirmPassword: !this.data.showConfirmPassword
    })
  },

  /**
   * 切换用户协议同意状态
   */
  onToggleAgreement() {
    this.setData({
      agreed: !this.data.agreed
    })
  },

  /**
   * 查看用户协议
   */
  onViewAgreement() {
    wx.showModal({
      title: '用户协议',
      content: '这里是用户协议的内容...',
      showCancel: false,
      confirmText: '我知道了'
    })
  },

  /**
   * 查看隐私政策
   */
  onViewPrivacy() {
    wx.showModal({
      title: '隐私政策',
      content: '这里是隐私政策的内容...',
      showCancel: false,
      confirmText: '我知道了'
    })
  },

  /**
   * 表单验证
   */
  validateForm() {
    const { username, password, confirmPassword } = this.data.form
    const { agreed } = this.data

    // 验证用户名
    if (!username.trim()) {
      this.showErrorToast('请输入用户名')
      return false
    }
    // 验证用户名必须以字母开头，长度至少6个字符，只能包含字母、数字、下划线
    if (!/^[a-zA-Z][a-zA-Z0-9_]{5,}$/.test(username)) {
      this.showErrorToast('用户名必须以字母开头，长度至少6个字符，只能包含字母、数字、下划线')
      return false
    }

    // 验证密码
    if (!password) {
      this.showErrorToast('请输入密码')
      return false
    }
    // 验证密码必须以字母开头，长度6-20位，只能包含字母、数字、下划线、@
    if (!/^[a-zA-Z][a-zA-Z0-9_@]{5,19}$/.test(password)) {
      this.showErrorToast('密码必须以字母开头，长度6-20位，只能包含字母、数字、下划线、@')
      return false
    }

    // 验证确认密码
    if (!confirmPassword) {
      this.showErrorToast('请确认密码')
      return false
    }
    if (password !== confirmPassword) {
      this.showErrorToast('两次输入的密码不一致')
      return false
    }

    // 验证用户协议
    if (!agreed) {
      this.showErrorToast('请先同意用户协议和隐私政策')
      return false
    }

    return true
  },

  /**
   * 显示错误对话框
   */
  showErrorToast(message) {
    wx.showToast({
      title: message,
      icon: 'none',
      duration: 3000
    })
  },

  /**
   * 用户注册
   */
  async onRegister() {
    // 防止重复提交
    if (this.data.loading) {
      return
    }

    // 表单验证
    if (!this.validateForm()) {
      return
    }

    this.setData({ loading: true })

    try {
      // 准备注册数据
      const registerData = {
        username: this.data.form.username.trim(),
        password: this.data.form.password,
        confirmPassword: this.data.form.confirmPassword,
        role: this.data.role
      }

      console.log('开始注册:', registerData)

      // 调用注册API
      const result = await api.user.register(registerData)
      console.log('注册成功:', result)

      // 注册成功后，如果有token则保存token（实现注册后自动登录）
      if (result.data.token) {
        try {
          wx.setStorageSync('userToken', result.data.token)
          console.log('Token已保存到本地存储')
        } catch (error) {
          console.error('保存token失败:', error)
        }
      }

      // 构建用户信息对象，传递给auth.js的setCurrentUser方法进行持久化
      const userInfo = {
        userId: result.data.userId,
        username: registerData.username,
        accountNumber: result.data.accountNumber,
        role: registerData.role,
        createdAt: new Date().toISOString()
      }
      
      // 调用auth.js中的setCurrentUser方法进行持久化
      const saveResult = auth.setCurrentUser(userInfo)
      if (saveResult) {
        console.log('用户信息已持久化到本地存储')
      } else {
        console.warn('持久化用户信息失败')
      }

      // 显示成功提示
      wx.showToast({
        title: '注册成功',
        icon: 'success',
        duration: 2000
      })

      // 如果有token，直接跳转到主页（自动登录）
      // 否则跳转到登录页面
      setTimeout(() => {
        if (result.data.token) {
          // 注册后自动登录，跳转到主页
          wx.switchTab({
            url: '/pages/common/index/index'
          })
        } else {
          // 没有token，跳转到登录页面
          wx.redirectTo({
            url: '/pages/auth/login/index'
          })
        }
      }, 1500)

    } catch (error) {
      console.error('注册失败:', error)
      
      // 显示错误对话框
      this.showErrorToast(error.message || '注册失败，请稍后重试')
    } finally {
      this.setData({ loading: false })
    }
  },

  /**
   * 跳转到登录页面
   */
  onGoLogin() {
    wx.navigateTo({
      url: '/pages/auth/login/index'
    })
  }
})
